package com.wrs.project.androiddemo

import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.activity.ComponentActivity
import com.huawei.hmf.tasks.OnFailureListener
import com.huawei.hmf.tasks.OnSuccessListener
import com.huawei.hms.hihealth.HuaweiHiHealth
import com.huawei.hms.hihealth.SettingController
import com.huawei.hms.hihealth.data.Scopes
import java.nio.charset.Charset

class AA {
}

class HealthActivity : ComponentActivity() {
    // SettingController对象
    private var mSettingController: SettingController? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
      var ss =  "".toByteArray(Charset.forName("UTF-8"))
        ss
        // 请注意此处的this为Activity对象
        mSettingController = HuaweiHiHealth.getSettingController(this)
        // 步骤2授权流程，每次启动时调用一下
        requestAuth()
    }

    /**
     * 声明需要申请的Scope，并获取Intent启动授权流程，此方法必须在Activity中使用
     */
    private fun requestAuth() {
        // 添加需要申请的权限，这里只是举例说明，开发者需要根据实际情况添加所需的权限
        val scopes: Array<String?> = arrayOf<String>( // 查看和存储HUAWEI Health Service Kit中的步数
            Scopes.HEALTHKIT_STEP_READ,
            Scopes.HEALTHKIT_STEP_WRITE,  // 查看和存储HUAWEI Health Service Kit中的身高体重
            Scopes.HEALTHKIT_HEIGHTWEIGHT_READ,
            Scopes.HEALTHKIT_HEIGHTWEIGHT_WRITE,  // 查看和存储HUAWEI Health Service Kit中的心率数据
            Scopes.HEALTHKIT_HEARTRATE_READ,
            Scopes.HEALTHKIT_HEARTRATE_WRITE
        )

        // 获取授权流程Intent，true表示开启运动健康App授权流程，false表示不开启
        val intent = mSettingController!!.requestAuthorizationIntent(scopes, true)

        // 打开授权流程页面
        Log.i(TAG, "start authorization activity")
        startActivityForResult(intent, REQUEST_AUTH)
    }

    // 日志Tag
    var text: String? = null
    fun cancelAuthorization(view: View?) {
        // 1. 获取ConsentsController对象
        // 请注意此处的this为Activity对象
        val mConsentsController = HuaweiHiHealth.getConsentsController(this)
        // 2. 是否删除用户数据,true为删除用户数据，false为不删除用户数据
        val clearUserData = true
        // 3. 取消应用全部授权，是否删除用户数据
        val task = mConsentsController.cancelAuthorization(clearUserData)
        task.addOnSuccessListener(object : OnSuccessListener<Void?> {
            override fun onSuccess(aVoid: Void?) {
                this@HealthActivity.text = ""
            }
        }).addOnFailureListener(object : OnFailureListener {
            override fun onFailure(e: Exception?) {
                Log.e(TAG, "cancelAuthorization exception")
            }
        })
    }

    private val healthAppAuthorization: Unit
        /**
         * 查询用户是否已开启华为运动健康服务
         */
        get() {
            // 请注意此处的this为Activity对象
            // 检查是否已开启华为运动健康服务
            val mSettingController = HuaweiHiHealth.getSettingController(this)
            mSettingController.getHealthAppAuthorization()
                .addOnFailureListener(object : OnFailureListener {
                    override fun onFailure(e: Exception?) {
                        Log.i("TAG", "getHealthAppAuthorization failed")
                    }
                })
                .addOnSuccessListener(object : OnSuccessListener<Boolean?> {
                    override fun onSuccess(result: Boolean) {
                        // 若返回true，表示用户已开启，反之表示未开启
                        // 此部分结果三方开发者可以本地保存，定期刷新，避免数据查询失败的场景
                        val res = if (result) "success" else "failed"
                        Log.i("TAG", "getHealthAppAuthorization is " + res)
                    }
                })
        }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        // 只处理授权流程的响应
        if (requestCode == REQUEST_AUTH) {
            // 从intent中获取授权响应结果
            val result = mSettingController!!.parseHealthKitAuthResultFromIntent(data)
            if (result == null) {
                Log.w(TAG, "authorization fail")
                return
            }

            if (result.isSuccess()) {
                Log.i(TAG, "authorization success")
                // authorizedScopes为用户勾选授权给您应用的权限信息
                // 请注意如果此处的权限信息和步骤二中登录时设置的权限信息存在差异，即用户在授权的时候没有勾选全部的权限信息
                // 开发者可以重新调用步骤二中的登录授权接口，拉起华为账号的登录授权
                // 为了提升用户体验，开发者需注意拉起华为账号的登录授权的频率，避免频繁拉起授权界面
                if (result.getAuthAccount() != null && result.getAuthAccount()
                        .getAuthorizedScopes() != null
                ) {
                    val authorizedScopes = result.getAuthAccount().getAuthorizedScopes()

                    Log.i(TAG, "authorization scope size " + authorizedScopes.size)
                }
            } else {
                Log.w(TAG, "authorization fail, errorCode:" + result.getErrorCode())
            }
        }
    }

    companion object {
        // 通过startActivityForResult方式拉起授权流程界面的请求码，具体数值开发者可以自行定义
        private const val REQUEST_AUTH = 1002
        private const val TAG = "HealthKitAuthActivity"
    }
}
